/**
 * 
 */
 function Person(name,age,sex='女'){
    // arguments 函数产生时生成   能够使得我们拿到所有的参数
    // console.log(arguments)
    this.name=name;
    this.age=age;
    this.sex=sex;
}

// 实例除了属性各有各的（私有的 constructor）
// 通过prototype 去解决对象间共享的方法（prototype） ，方法实例对象是共享的，节约内存空间。
//constructor完成对象构造，在使用prototype连接共享方法
Person.prototype.sayHi=function(){
    console.log('你好啊？')
}
//箭头函数中没有this arguments
const objectFactory=function(){
    console.log(arguments,'---')
    var obj=new Object();
    //链表 队列
    // 构造一下
    //arguments 不是一个真正的数组 伪数组 可以用下标访问，可以循环，但是不具有更多的方法
    //解决方法：借
    // .call手动指定this指向argements(原来指向[])  
    
   var varConstructor=[].shift.call(arguments)
//    console.log(varConstructor,'???')

   // Array.from 可以把伪数组变成真数组
//    var varConstructor= Array.from(arguments).shift();
//    console.log( Array.from(arguments).shift(),'\\\\')
   varConstructor.call(obj,...arguments)//传参数
   obj.__proto__=varConstructor.prototype;
    return obj;
    
}
//手动实现new
//把函数person当做值
const obj=objectFactory(Person,'吴亦凡',18,'男');
console.log(obj,'-----------')
obj.sayHi();